package ListNodeSecond.SwordOffer;

import java.util.Stack;

public class ReverseList {
    /**
     * 反转链表
     */
    public static ListNode reverseList(ListNode head) {
        if (head == null) {
            return null;
        }
        Stack<Integer> stack = new Stack<>();
        while (head != null) {
            stack.add(head.val);
            head = head.next;
        }
        ListNode listNode = new ListNode(0);
        ListNode yummyNode = listNode;
        while (!stack.isEmpty()) {
            int pop = stack.pop();
            ListNode temp = new ListNode(pop);
            listNode.next = temp;
            listNode = listNode.next;
        }
        return yummyNode.next;
    }

    //翻转链表                          1->2->3->4
    public static ListNode reverseListNew(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode tempListNode = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tempListNode;
        }
        return pre;
    }

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        System.out.println(listNode1.toString());
        ListNode listNode = ReverseList.reverseList(listNode1);
        System.out.println(listNode.toString());
    }

}
